package com.gl.glcourses.model
{
	import com.gl.glcourses.events.GLCoursesEvent;
	import com.gl.glcourses.model.constants.Constants;
	import com.gl.glcourses.vos.*;
	
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CollectionEvent;
	import mx.utils.StringUtil;
	
//	import org.hamcrest.mxml.collection.Array;

	public class AltaCursoPanelModel extends PresentationModel
	{		
		
		private var _cursoNuevo:Curso  = new Curso();
		[Bindable]
		public var model:AltaCursoPanelModel;
		[Bindable]
		public var tiposCurso:ArrayCollection;
		[Bindable]
		public var perfiles:ArrayCollection;
		[Bindable]
		public var perfilesCheckBoxList:ArrayCollection = new ArrayCollection();
		[Bindable]
		public var tiposCursoCheckBoxList:ArrayCollection = new ArrayCollection();
		[Bindable]
		public var tipoCursoSeleccionado:Array = new Array();
		[Bindable]
		public var perfilSeleccionado:Array = new Array();
		[Bindable]
		public var prioridadSeleccionada:Number=new Number(); 
		[Bindable]
		public var cantHorasSeleccionados:Number=new Number(); 
		[Bindable]
		public var cantMinutosSeleccionados:Number=new Number();
		[Bindable]
		public var materialAdjuntoNuevo:MaterialAdjunto = new MaterialAdjunto();
		[Bindable]
		public var materialesAdjuntos:ArrayCollection = new ArrayCollection();
		[Bindable]
		public var visibilidadAdjunto:Boolean = false;
		[Bindable]
		public var materialAdjuntoItemEdit: MaterialAdjunto;
		[Bindable]
		public var currentState:String;
		private var _cursoSeleccionadoAccion:String;
		
		[Bindable]
		public function get cursoNuevo():Curso
		{
			return _cursoNuevo;
		}
		
		public function set cursoNuevo(value:Curso):void
		{
			_cursoNuevo = value;
			prioridadSeleccionada = value.prioridad;
			/*cantHorasSeleccionados=(value.cantidadMinutosTotal)/60;
			cantMinutosSeleccionados=value.cantidadMinutos;*/
			this.setDurationNs();
			this.setCheckBoxItems();
			this.setCheckBoxItems2();
		
		}
		
		private function setDurationNs():void
		{
			var minutosTemp:Number = this.cursoNuevo.cantidadMinutosTotal;
			this.cantHorasSeleccionados = 0;
			this.cantMinutosSeleccionados = 0;
			while(minutosTemp >= 60)
			{
				this.cantHorasSeleccionados++;
				minutosTemp-=60;
			}
			this.cantMinutosSeleccionados = minutosTemp;
			currentState = Constants.ESTADO_MODIFICAR_CURSO;
		}
		
		public var perfil:Perfil;
		public var tipoCurso:TipoCurso;
		[Bindable]
		public var selectedIndices:Array = new Array();
		[Bindable]
		public var selectedIndices2:Array = new Array();
		
		private function setCheckBoxItems():void
		{
			perfilesCheckBoxList.removeAll();
			this.selectedIndices = new Array();
			for(var i:int=0; i<perfiles.length; i++)
			{
				perfil = perfiles.getItemAt(i) as Perfil;
				perfilesCheckBoxList.addItem({name:perfil.nombre,enabled:true});	
				
				if(perfilSeleccionadoFunction(perfil))
				{
					
					var indices:Array = this.selectedIndices;
					indices.push(this.perfilesCheckBoxList.length - 1);
					this.selectedIndices = indices; 
				}
			
				perfilesCheckBoxList.refresh();}
		}
		
		private function perfilSeleccionadoFunction(perfilSearch:Perfil):Boolean
		{
			var perfilTemp:Perfil;
			
			for(var i:int=0; i<cursoNuevo.perfil.length; i++)
			{
				perfilTemp = cursoNuevo.perfil.getItemAt(i) as Perfil;
				
				if(perfilTemp.nombre == perfilSearch.nombre)
				{
					return true;
				}
			}
			return false;
		}
		
		private function setCheckBoxItems2():void
		{
			tiposCursoCheckBoxList.removeAll();
			this.selectedIndices2 = new Array();
			for(var i:int=0; i<tiposCurso.length; i++)
			{
				tipoCurso = tiposCurso.getItemAt(i) as TipoCurso;
				tiposCursoCheckBoxList.addItem({name:tipoCurso.nombre,enabled:true});	
				
				if(tiposCursoSeleccionadoFunction(tipoCurso))
				{
					var indices:Array = this.selectedIndices2;
					indices.push(this.tiposCursoCheckBoxList.length - 1);
					this.selectedIndices2 = indices; 
				}
			}
		}
		
		private function tiposCursoSeleccionadoFunction(tipoCursoSearch:TipoCurso):Boolean
		{
			var tipoCursoTemp:TipoCurso;
			
			for(var i:int=0; i<cursoNuevo.tipoCurso.length; i++)
			{
				tipoCursoTemp = cursoNuevo.tipoCurso.getItemAt(i) as TipoCurso;
				
				if(tipoCursoTemp.nombre == tipoCursoSearch.nombre)
				{
					return true;
				}
			}
			return false;
		}
	
		[Bindable]
		public function get cursoSeleccionadoAccion():String
		{
			return _cursoSeleccionadoAccion;
		
		}
		
		public function setCursoSeleccionadoAccion(cursoGrid:Curso, tab:String):void
		{
			_cursoSeleccionadoAccion = tab;
			
			if(_cursoSeleccionadoAccion == Constants.ACCION_ALTA_CURSO)
			{				
				currentState = Constants.ESTADO_ALTA_CURSO;
			}
			
			if(_cursoSeleccionadoAccion == Constants.ACCION_MODIFICAR_CURSO)
			{
				this.cursoNuevo = cursoGrid;
				var minutosTemp:Number = this.cursoNuevo.cantidadMinutosTotal;
				this.cantHorasSeleccionados = 0;
				this.cantMinutosSeleccionados = 0;
				while(minutosTemp >= 60)
				{
					this.cantHorasSeleccionados++;
					minutosTemp-=60;
				}
				this.cantMinutosSeleccionados = minutosTemp;
				currentState = Constants.ESTADO_MODIFICAR_CURSO;			
			}
		}	
		
	
		public function limpiarSegunConfirmacion( confirmacion:Confirmacion ):void {
			if( confirmacion.estado == Constants.CONFIRMACION_OK ){
				limpiar();
			}
			var event:GLCoursesEvent = new GLCoursesEvent(GLCoursesEvent.CAMBIAR_TAB);
			event.tabSeleccionado = Constants.TAB_CURSOS;
			dispatch(event);
		}
		
		public function limpiar():void
		{ 
	
			 cursoNuevo = new Curso();
		     prioridadSeleccionada=0;
			 cursoNuevo.cantidadMinutosTotal=0;
		     cantHorasSeleccionados=0;
			 cantMinutosSeleccionados=0;
			 cursoNuevo.perfil.removeAll();
			 cursoNuevo.tipoCurso.removeAll();
			 perfilSeleccionado = new Array(); //
			// perfiles = new ArrayCollection();
			 tipoCursoSeleccionado = new Array();
			 //tiposCurso=new ArrayCollection();
			 materialAdjuntoNuevo.url="";
			 cursoNuevo.materialesAdjunto.removeAll();
			 visibilidadAdjunto = false;
		}
		
		private function validarAltaCurso():Boolean
		{
			var valido:Boolean = true;
			    cursoNuevo.nombre=StringUtil.trim(cursoNuevo.nombre);
				cursoNuevo.requisitos=StringUtil.trim(cursoNuevo.requisitos);
				cursoNuevo.bibliografia=StringUtil.trim(cursoNuevo.bibliografia);
				
				if( cursoNuevo.nombre == "" )
				{
					Alert.show(Constants.getString( "alert.courseName" ));
					valido = false;					
				} else
					
					valido=true;
				
				return valido
		
		}
		
		private function validarAltaAdjunto():Boolean
		{
			var valido:Boolean = true;
			materialAdjuntoNuevo.url=StringUtil.trim(materialAdjuntoNuevo.url)
			if( materialAdjuntoNuevo.url == "" )
			{
				Alert.show(Constants.getString( "alert.linkName" ));
				valido = false;					
			} else
				
				valido=true;
			
			return valido
			
		}
		public function guardarCurso():void {
				
			if( cursoSeleccionadoAccion == Constants.ACCION_ALTA_CURSO){
				if( currentState== Constants.ESTADO_ALTA_CURSO) {
					if( validarAltaCurso() ){
					var event:GLCoursesEvent= new GLCoursesEvent( GLCoursesEvent.ALTA_CURSO );
					event.cursoNuevo = cursoNuevo;
					event.cursoNuevo.cantidadMinutosTotal=((cursoNuevo.cantidadMinutosTotal)*60)+(cursoNuevo.cantidadMinutos);
					event.cursoSeleccionadoAccion = Constants.ACCION_ALTA_CURSO
					dispatch( event );
					limpiar(); 
					
					}
				}
			}

			//Modificar Curso
			if( cursoSeleccionadoAccion == Constants.ACCION_MODIFICAR_CURSO){
				if( currentState == Constants.ESTADO_MODIFICAR_CURSO){
					if( validarAltaCurso() ){
					var event:GLCoursesEvent = new GLCoursesEvent( GLCoursesEvent.MODIFICAR_CURSO );					cursoNuevo.cantidadMinutosTotal = 0;
					cursoNuevo.cantidadMinutosTotal = (cantHorasSeleccionados*60)+cantMinutosSeleccionados;
					event.cursoNuevo=cursoNuevo;	
					this.cantHorasSeleccionados = 0;
					this.cantMinutosSeleccionados = 0;
					event.cursoSeleccionadoAccion = Constants.ACCION_MODIFICAR_CURSO;
					dispatch( event );
					limpiar(); 
			
					}		
				}
			}
		}
		
		public function cancelarAltaCurso():void
		{
				limpiar(); 
			
		}
	
	public function agregarAdjunto(event:MouseEvent):void
	{
		if(validarAltaAdjunto()){
		// le agrego la lista
		cursoNuevo.materialesAdjunto.addItem(materialAdjuntoNuevo);
		materialAdjuntoNuevo = new MaterialAdjunto();
		visibilidadAdjunto = true;
		
	}}
	
}
	
}